package com.kexio.user.constants;

/**
 * 系统常量定义
 * 
 * 统一管理系统中的硬编码常量，避免魔法值
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public class SystemConstants {
    
    // ==================== 系统用户 ====================
    
    /**
     * 系统操作用户ID（用于系统自动操作、定时任务等场景）
     */
    public static final String SYSTEM_USER_ID = "SYSTEM";
    
    /**
     * 系统操作用户名称
     */
    public static final String SYSTEM_USERNAME = "系统操作";
    
    /**
     * 默认管理员用户名
     */
    public static final String DEFAULT_ADMIN_USERNAME = "admin";
    
    // ==================== 角色相关 ====================
    
    /**
     * 超级管理员角色编码（主标准）
     */
    public static final String SUPER_ADMIN_ROLE_CODE = "SUPER_ADMIN";
    
    /**
     * 管理员角色编码
     */
    public static final String ADMIN_ROLE_CODE = "ADMIN";
    
    /**
     * 普通用户角色编码
     */
    public static final String USER_ROLE_CODE = "USER";
    
    /**
     * 经理角色编码
     */
    public static final String MANAGER_ROLE_CODE = "MANAGER";
    
    // ==================== 密码相关 ====================
    
    /**
     * 密码最大错误尝试次数（默认值，实际以配置为准）
     */
    public static final int DEFAULT_MAX_PASSWORD_ERROR_COUNT = 5;
    
    /**
     * 账户锁定时长（分钟，默认值）
     */
    public static final int DEFAULT_ACCOUNT_LOCK_MINUTES = 30;
    
    /**
     * 生成随机密码的默认长度
     */
    public static final int DEFAULT_RANDOM_PASSWORD_LENGTH = 12;
    
    // ==================== 分页相关 ====================
    
    /**
     * 默认分页大小
     */
    public static final int DEFAULT_PAGE_SIZE = 10;
    
    /**
     * 最大分页大小
     */
    public static final int MAX_PAGE_SIZE = 1000;
    
    // ==================== 导出相关 ====================
    
    /**
     * 导出最大记录数
     */
    public static final int MAX_EXPORT_RECORDS = 10000;
    
    /**
     * CSV文件字符编码
     */
    public static final String CSV_CHARSET = "UTF-8";
    
    /**
     * CSV文件内容类型
     */
    public static final String CSV_CONTENT_TYPE = "text/csv; charset=UTF-8";
    
    // ==================== 权限变更原因 ====================
    
    /**
     * 权限变更原因：密码修改
     */
    public static final String PERM_CHANGE_REASON_PASSWORD_CHANGED = "PASSWORD_CHANGED";
    
    /**
     * 权限变更原因：密码重置
     */
    public static final String PERM_CHANGE_REASON_PASSWORD_RESET = "PASSWORD_RESET";
    
    /**
     * 权限变更原因：角色变更
     */
    public static final String PERM_CHANGE_REASON_ROLE_CHANGED = "ROLE_CHANGED";
    
    /**
     * 权限变更原因：用户禁用
     */
    public static final String PERM_CHANGE_REASON_USER_DISABLED = "USER_DISABLED";
    
    /**
     * 权限变更原因：用户删除
     */
    public static final String PERM_CHANGE_REASON_USER_DELETED = "USER_DELETED";
    
    // ==================== 私有构造函数 ====================
    
    private SystemConstants() {
        throw new IllegalStateException("Utility class - do not instantiate");
    }
}

